
#include "data.h"
#include "UART.h"
#include <string.h>
#include <avr/interrupt.h>
//----------------------------------------//
//! valid_Data                            //
//! Overeni startu ramce (znak $)  		  //
//! param prijaty znak					  //
//----------------------------------------//
int validData(const char arg_znak)
{
	    if(arg_znak=='$')
        {
                return 1;
        }
        return 0;
}

//----------------------------------------//
//! read_Data                             //
//! NActeni a overeni platnosti dat (vet) //
//! param v
//----------------------------------------//
void nactiData(char znak) {

	GPSdata *loc_ptr;
	pocet_znaku++;

	if ((pocet_znaku == 3) && (znak != 'R')) {
		//loc_ptr->platnost = NESPRAVNY_VSTUP;
		pocet_znaku=0;
		flag=0;
		return;
	}

	if ((pocet_znaku == 18) && (znak == 'A'))            //<! Nejsou validni data
	{
		//loc_ptr->platnost = NEPLATNA_DATA;
		pocet_znaku=0;
		flag=0;

		return;
	}

	if (pocet_znaku > 18) {
		if(pocet_znaku==35)
		{
			cli();
			stav=PLATNA_DATA;
			return;

		}
		write_Character(znak);
		switch (znak) {
		//case '.': TEcka se bude hodit jako rozdelovac
		case ',':
		case 'E':
		case 'N':
			break;
		default:
			pole[pocet_znaku - 18] = znak;           //<! Ulozeni platnejch dat
			break;
		}
	}

//	flag = 0;
}


//Platny data #ifnded INIT, #define INIT

void ulozeniDat(GPSdata *arg_pozice)
{
	arg_pozice->delka=getValue();
	arg_pozice->sirka=copyPole();
	flag=0;
	pocet_znaku=0;
	sei();
	arg_pozice->platnost=PLATNA_DATA;
	pole[0]='\0';
	stav=DATA;
}
double copyPole()
{
	char loc_znak;
	for(int i=0;i<5;i++)
	{
		loc_znak=pole[i+5];
		pole[i]=loc_znak;
	}
	return (getValue());
}

double getValue()
{
	char loc_pole[5];
	strncpy(pole,loc_pole,5);
	double a;
	return a;
	//return (atof(loc_pole));
}
void kontrolaDat()
{

	if ((ptr_reference->platnost == PLATNA_DATA)
						&& (ptr_aktualni->platnost == PLATNA_DATA))
	{
		porovnejPolohy();
	}
	else
	{
		stav=NEPLATNA_DATA;
		ptr_aktualni->platnost=NEPLATNA_DATA;
	}


}
void porovnejPolohy()
{
	if((ptr_reference->delka!=ptr_aktualni->delka)||(ptr_reference->sirka!=ptr_aktualni->sirka))
	{
		//Generace alarmu
	}
}
